package com.heima.model.wemedia.pojos;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.apache.ibatis.type.Alias;

import java.io.Serializable;
import java.util.Date;

/**
 * <p>
 * 自媒体图文内容信息表
 * </p>
 *
 * @author itheima
 */
@Data//Lombok注解，用于自动生成getter, setter, toString, equals, hashCode等方法，减少样板代码
@TableName("wm_news")//MyBatis Plus注解，指定该类对应的数据库表名为wm_news
//WmNews类实现了Serializable接口，使该类的对象可以被序列化，便于在网络上传输或存储到文件中
public class WmNews implements Serializable {

    //对于实现了Serializable接口的类，Java会为该类生成一个版本序列号，此处显式声明以避免类的默认序列化版本号被修改
    private static final long serialVersionUID = 1L;

    /**
     * 主键
     */
    //指定主键，并且类型为自动增长（AUTO），代表文章的唯一标识
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;

    /**
     * 自媒体用户ID
     */
    @TableField("user_id")
    private Integer userId;

    /**
     * 标题
     */
    @TableField("title")
    private String title;

    /**
     * 图文内容
     */
    @TableField("content")
    private String content;

    /**
     * 文章布局
            0 无图文章
            1 单图文章
            3 多图文章
     */
    //注释说明了不同布局类型对应的数值
    @TableField("type")
    private Short type;

    /**
     * 图文频道ID
     */
    @TableField("channel_id")
    private Integer channelId;

    /**
     * 标签
     */
    @TableField("labels")
    private String labels;

    /**
     * 创建时间
     */
    @TableField("created_time")
    private Date createdTime;

    /**
     * 提交时间
     */
    @TableField("submited_time")
    private Date submitedTime;

    /**
     * 当前状态
            0 草稿
            1 提交（待审核）
            2 审核失败
            3 人工审核
            4 人工审核通过
            8 审核通过（待发布）
            9 已发布
     */
    //注释说明了不同状态对应的数值
    @TableField("status")
    private Short status;

    /**
     * 定时发布时间，不定时则为空
     */
    @TableField("publish_time")
    private Date publishTime;

    /**
     * 拒绝理由
     */
    @TableField("reason")
    private String reason;

    /**
     * 发布库文章ID
     */
    @TableField("article_id")
    private Long articleId;

    /**
     * 图片用逗号分隔
     */
    @TableField("images")
    private String images;

    /**
     * 文章是否启用的状态标志
     * 0 禁用
     * 1 启用
     */
    @TableField("enable")
    private Short enable;
    
     //状态枚举类，对应着本表的status字段，因为字段较多，所以单独定义一个枚举类
    @Alias("WmNewsStatus")//为这个枚举在MyBatis映射文件中提供一个别名，这样在配置映射时可以简化书写
    public enum Status{
        NORMAL((short)0),SUBMIT((short)1),FAIL((short)2),ADMIN_AUTH((short)3),ADMIN_SUCCESS((short)4),SUCCESS((short)8),PUBLISHED((short)9);
        short code;
        Status(short code){
            this.code = code;
        }
        public short getCode(){
            return this.code;
        }
    }

}